-
Notifications
You must be signed in to change notification settings - Fork 14.4k
Address a handful of C4146 compiler warnings where literals can be replaced with std::numeric_limits #147623
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Address a handful of C4146 compiler warnings where literals can be replaced with std::numeric_limits #147623
Conversation
@llvm/pr-subscribers-clang @llvm/pr-subscribers-clang-format Author: Alex Sepkowski (alsepkow) ChangesThis PR addresses instances of compiler warning C4146 that can be replaced with std::numeric_limits. Specifically, these are cases where a literal such as '-1ULL' was used to assign a value to a uint64_t variable. The intent is much cleaner if we use the appropriate std::numeric_limits value<Type>::max() for these cases. Addresses #147439 Full diff: https://github.com/llvm/llvm-project/pull/147623.diff 4 Files Affected:
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 60c658a8d8f99..5d399a3c75ca8 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -1428,11 +1428,11 @@ namespace {
}
bool destroy(bool RunDestructors = true) {
bool OK = cleanup(Info, RunDestructors, OldStackSize);
- OldStackSize = -1U;
+ OldStackSize = std::numeric_limits<unsigned>::max();
return OK;
}
~ScopeRAII() {
- if (OldStackSize != -1U)
+ if (OldStackSize != std::numeric_limits<unsigned>::max())
destroy(false);
// Body moved to a static method to encourage the compiler to inline away
// instances of this class.
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp
index f0412cddc6f19..5f5a5d9d8a571 100644
--- a/clang/lib/Format/Format.cpp
+++ b/clang/lib/Format/Format.cpp
@@ -22,7 +22,9 @@
#include "UnwrappedLineFormatter.h"
#include "UsingDeclarationsSorter.h"
#include "clang/Tooling/Inclusions/HeaderIncludes.h"
+
#include "llvm/ADT/Sequence.h"
+#include <limits>
#define DEBUG_TYPE "format-formatter"
@@ -777,7 +779,7 @@ template <> struct MappingTraits<FormatStyle::SpacesInLineComment> {
IO.mapOptional("Maximum", signedMaximum);
Space.Maximum = static_cast<unsigned>(signedMaximum);
- if (Space.Maximum != -1u)
+ if (Space.Maximum != std::numeric_limits<unsigned>::max())
Space.Minimum = std::min(Space.Minimum, Space.Maximum);
}
};
@@ -1672,7 +1674,8 @@ FormatStyle getLLVMStyle(FormatStyle::LanguageKind Language) {
LLVMStyle.SpacesBeforeTrailingComments = 1;
LLVMStyle.SpacesInAngles = FormatStyle::SIAS_Never;
LLVMStyle.SpacesInContainerLiterals = true;
- LLVMStyle.SpacesInLineCommentPrefix = {/*Minimum=*/1, /*Maximum=*/-1u};
+ LLVMStyle.SpacesInLineCommentPrefix = {
+ /*Minimum=*/1, /*Maximum=*/std::numeric_limits<unsigned>::max()};
LLVMStyle.SpacesInParens = FormatStyle::SIPO_Never;
LLVMStyle.SpacesInSquareBrackets = false;
LLVMStyle.Standard = FormatStyle::LS_Latest;
diff --git a/clang/lib/Lex/Lexer.cpp b/clang/lib/Lex/Lexer.cpp
index 78988e928a689..1f695b4a8676c 100644
--- a/clang/lib/Lex/Lexer.cpp
+++ b/clang/lib/Lex/Lexer.cpp
@@ -41,6 +41,7 @@
#include <cstddef>
#include <cstdint>
#include <cstring>
+#include <limits>
#include <optional>
#include <string>
#include <tuple>
@@ -3456,7 +3457,7 @@ std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr,
}
unsigned Value = llvm::hexDigitValue(C);
- if (Value == -1U) {
+ if (Value == std::numeric_limits<unsigned>::max()) {
if (!Delimited)
break;
if (Diagnose)
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 3c3d29c415249..fcc015be1d5f4 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -65,6 +65,7 @@
#include "llvm/Support/SaveAndRestore.h"
#include "llvm/Support/TimeProfiler.h"
#include "llvm/Support/TypeSize.h"
+#include <limits>
#include <optional>
using namespace clang;
@@ -1906,7 +1907,7 @@ ExprResult Sema::CreateGenericSelectionExpr(
}
SmallVector<unsigned, 1> CompatIndices;
- unsigned DefaultIndex = -1U;
+ unsigned DefaultIndex = std::numeric_limits<unsigned>::max();
// Look at the canonical type of the controlling expression in case it was a
// deduced type like __auto_type. However, when issuing diagnostics, use the
// type the user wrote in source rather than the canonical one.
@@ -1961,7 +1962,8 @@ ExprResult Sema::CreateGenericSelectionExpr(
// C11 6.5.1.1p2 "If a generic selection has no default generic association,
// its controlling expression shall have type compatible with exactly one of
// the types named in its generic association list."
- if (DefaultIndex == -1U && CompatIndices.size() == 0) {
+ if (DefaultIndex == std::numeric_limits<unsigned>::max() &&
+ CompatIndices.size() == 0) {
auto P = GetControllingRangeAndType(ControllingExpr, ControllingType);
SourceRange SR = P.first;
Diag(SR.getBegin(), diag::err_generic_sel_no_match) << SR << P.second;
|
|
clang/lib/Format/Format.cpp
Outdated
@@ -777,7 +779,7 @@ template <> struct MappingTraits<FormatStyle::SpacesInLineComment> { | |||
IO.mapOptional("Maximum", signedMaximum); | |||
Space.Maximum = static_cast<unsigned>(signedMaximum); | |||
|
|||
if (Space.Maximum != -1u) | |||
if (Space.Maximum != std::numeric_limits<unsigned>::max()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if (Space.Maximum != std::numeric_limits<unsigned>::max()) | |
if (Space.Maximum < UINT_MAX) |
as that's what's used elsewhere in the file.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On further consideration, I think it would be cleaner to stay consistent with using numeric_limits for all of the updates. And given that there are only a handful of UINT_MAX cases in this file I've swapped them to use numeric_limits for consistency. That would be the preferred choice if this were new code anyways.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree that this improves the clarity here. LGTM!
Swap to UINT_MAX to match formatting of the rest of the file. Co-authored-by: Owen Pan <owenpiano@gmail.com>
I went ahead and merged this for you. Thanks! |
This PR addresses instances of compiler warning C4146 that can be replaced with std::numeric_limits. Specifically, these are cases where a literal such as '-1ULL' was used to assign a value to a uint64_t variable. The intent is much cleaner if we use the appropriate std::numeric_limits value::max() for these cases.
Addresses #147439